热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

综述|推荐系统里预训练模型

在科学研究中,从方法论上来讲,都应“先见森林,再见树木”。当前,人工智能学术研究方兴未艾,技术迅猛发展,可谓万木争荣,日新月异。对于AI从业者来说,在广袤的知识森林中,系统梳理脉络

在科学研究中,从方法论上来讲,都应“先见森林,再见树木”。当前,人工智能学术研究方兴未艾,技术迅猛发展,可谓万木争荣,日新月异。对于AI从业者来说,在广袤的知识森林中,系统梳理脉络,才能更好地把握趋势。为此,我们精选国内外优秀的综述文章,开辟“综述专栏”,敬请关注。

来源:知乎—trouble

地址:https://zhuanlan.zhihu.com/p/433610155

01

UPRec: User-Aware Pre-training for Recommender Systems [submitted to TKDE]

先前的推荐系统里的预训练模型都只是专注于利用用户行为序列里面的通用序列模式,但是他们忽视了使用用户的信息来捕获个性化的兴趣。在这篇文章里作者提出一个用异构用户信息来增强预训练模型,叫做 User-aware Pre-training for Recommendation (UPRec). UPRec利用用户属性和结构化的社交图来构建预训练阶段的自监督目标函数并提出两个用户感知的预训练任务。


与NLP领域的预训练的区别:NLP里面的预训练专注于学习通用的语言知识,而推荐系统不仅应该利用通用的序列模式,而且应该捕获每个用户的个性化的兴趣。因此在预训练的时候利用用户信息还是很有必要的。


图片

这里主要定义了三个目标函数:



  • Masked Item Prediction

图片



  • User Attribute Prediction

图片

其中    是数值型特征的集合,    是离散型特征的集合。



  • Social Relation Detection

图片

这里就是用的对比学习范式,目的是想让query用户的表示和其朋友的表示相似度接近,和负样本的表示原理。

图片

UPRec包含两步,首先通过上面的L来预训练encoder,而在微调阶段使用预训练好的参数来初始化encoder的参数来进行下游任务。对于序列化推荐的任务,首先将序列里最后一个一个物品给masked掉并采用masked target的negative log-likelihood来优化模型。对于用户属性预测的任务,我们使用 [CLS] 的hidden vector来表示用户,然后对于数值型特征用回归的目标函数,对离散型特征用分类的目标函数(这里设置和预训练阶段一样)。

02

U-BERT: Pre-training User Representations for Improved Recommendation [AAAI 21]

用户表示通常是从行为数据(点击、评论内容)里面学习。但是,对于不那么流行的域,行为数据不足以让模型充分地学习到精确的用户表示。为了解决这个问题,一个自然的想法就是用内容丰富的域来补全用户表示。受最近NLP领域的Bert的启发,我们提出了一个新颖的预训练和微调为基础的方法U-BERT。不同于BERT,U-BERT是专门为推荐系统定制的。在预训练阶段,U-BERT专注于内容丰富的域并引进一个用户编码器和评论编码器来建模用户的行为。两个预训练策略也被提出来学习通用的用户表示;在微调阶段,U-BERT专注于目标内容不丰富的域,出了预训练阶段的两个编码器,U-BERT进一步引入了物品编码器来建模物品表示。此外,一个review co-matching layer也被提出去从用户和物品的评论里面学习语义更丰富的交互。最终,U-BERT结合用户表示,物品表示和评论交互信息去提高推荐系统性能。

图片

Review Encoder就是用一个Bert来学习评论的表示

User Encoder的表示学习如下

图片

图片

图片

这里就是先将ID embedding和domain embedding相结合,得到一个新的用户embedding,然后将其和学习到的评论的表示做ATTN操作,做后再融合到一起。

预训练阶段两个任务:

任务一:Masked Opinion Token Prediction

与BERT相比做的修改:1)当预测masked word的时候,除了句子内容的表示,我们还添加了用户的表示来学习用户本质上的评论偏好;2)我们选择观点类的单词掩掉而不是随机掩单词,因为观点类的单词是不同域的评论共用的。

图片

任务二:Opinion Rating Prediction

这里使用融合了文本观点信息和通用的用户偏好信息来作为最终的用户embedding来预测评分。

图片

预训练

图片

微调U-BERT来进行评分预测任务

图片

这里除了预训练阶段的两个encoder,还引入了Item Encoder.

Review Co-Matching Layer


通过理解用户u‍的评论,我们可以知道他关心的点。而通过理解物品i的评论我们可以知道这个物品所有方面的细节并且所有用户对于该物品的general comments.


因此我们可以估计用户u对物品i各个方面的关心程度通过衡量他们的评论语义相似度。受阅读理解里相关的工作启发,这里使用co-matching机制来收集相似信息。

图片

上面这里是将彼此的评论对齐,接下来就是引进匹配层来捕获原来的表示和注意力之后的表示的语义相似程度。

图片

最后使用row-wise的max-pooling来融合所有位置的匹配信息来得到对用户评论和物品评论的充分理解。

图片

预测层和训练:

图片

图片

实验设置:



  • Amazonproduct review datasets:选了十个域的数据集,前五个用来进行预训练,后五个进行微调



  • Yelp:选择了AZ metropolitan区域的餐厅的评论进行预训练,剩下的区域的餐厅的评论进行微调任务。





03

Curriculum Pre-Training Heterogeneous Subgraph Transformer for Top- Recommendation [arxiv 21]

HIN里面包含很多复杂并且可能和推荐任务不相关的信息,因此怎么从HIN里面高效地利用有用的信息来提升推荐系统地性能是一个挑战。为了解决上面的问题,本文提出了Curriculum pre-training based HEterogeneous Subgraph Transformer(CHEST)。具体的,作者考虑从HIN里面提取有用的信息来组成交互相关的异构子图,子图包含了充分并且相关的信息来进行推荐。然后本文通过一个一个异构子图transformer来捕获丰富的语义知识。此外,本文还设计了一个curriculum 预训练策略来提供一个初级到高级地学习过程,使得HIN里面学习到的基础的语义知识可以平滑地迁移到user-item交互地建模中。

图片

本文首先根据UIUI、UIAI这两条路径规则采样出N条target user(    )到target item(    )地路径构建出一个异构子图。

图片

随后根据图上不同的节点位于target user的几阶关系上把对应的节点分到对应的slot,并找到对应的slot embedding,然后为了更充分地考虑结构信息,作者还考虑了前继节点的embedding,对于有多个前继节点的节点embedding,用其前继节点的平均和表示。

图片

那么最后就是将节点的ID embedding,Type embedding,Slot embedding,Precursor embedding加起来获得了异构子图上每一个节点的初始化表示。随后再把这个序列送到self-attention layer来进行交互学习到一个完整的图表示。

图片

那么整个图的表示就可以用最后一层的目标用户和目标物品的表示拼接后送到MLP里进行学习。

有了上面的模型架构,那么接下来就是设计一个专门适用于HIN-based recommendation的表示学习方法。考虑到HIN 编码复杂和异构的数据关系,本文的想法就是从交互相关的异构子图里逐渐提取和学习从local(node-level)到global(graph-level)的内容。这里使用增量预训练的策略制定了初级和高级的课程。



  • 初级课程:初级课程旨在利用从交互相关的异构子图里面利用本地内容信息。设计了 Mased Node Prediction、Masked Edge Prediction 和 Meta-path Type Prediction三个与训练任务,前两个任务专注于增强节点级别的表示,而 第三个任务是用来捕获u-i交互的路径级别的语言。



  • 高级课程:初级课程没法学习到整个子图全局一致性,所以这里设计了 子图对比学习的任务来弥补。这里采用的三种数据增强的方式:Path Removal、Path Insertion、Path Substitution来获得子图的不同视图。



图片

最后也是通过对比学习的方式来学习子图的表示。

整个过程有两个阶段,增量预训练和微调。

在预训练阶段,先在初级课程上预训练,再在高级课程上预训练。微调阶段用预训练阶段训练好的模型参数来初始化模型,并采用推荐任务训练模型。

图片

图片

04

Contrastive Pre-Training of GNNs on Heterogeneous Graphs [CIKM 21]

尽管GNN已经是学习图表示的sota方法,但是他们通常都需要大量的标签数据来使得模型能够训练出满意的性能,而标签数据通常是昂贵且难以获得的。为了缓解标签稀疏的问题,一些预训练的任务策略开始被应用于GNNs上,来从图的通用结构属性上学习可迁移的知识。但是,现有的预训练策略都只是为同质图设计的,而本文认为,异构图能够表示更丰富的语义,这是被现有工作所忽视的。在这篇文章中,我们提出一个新颖的异构图上基于GNN的对比预训练策略(CPT-HG)来用自监督的方式捕获语义和结构信息。特别地,我们在关系级和子图级都设置了对应的语义感知的预训练任务并进一步用对比学习增强他们的表示。

作者将现有的基于自监督地GNN预训练工作分为两类:

1)模型在多个图上预训练然后在一个新的没有见过的图上微调来执行下游任务;

2)模型在一个大规模地图上预训练然后将其学到的知识迁移到剩下的部分来执行下游任务。

设计异构图地图卷积上的预训练面临地两点挑战:

1)怎么在预训练的时候区分不同类型地节点和边;

2)怎么在预训练时进一步保留高阶的语义信息。

图片

Relation-level Pre-training Task

这里负样本有两种类型:一种是不相关的节点,也就是如图都是文章p1,但是它和没有连接过的用户匹配了;另一种就是不一致的关系,就是比如如图(p1,c1)它们之间的关系就不是(文章,作者)这种关系。然后正样本我理解的就是满足(文章,作者)关系的节点对。随后在这个任务上使用对比学习来学习关系级别的表示。

Subgraph-level pre-training task

使用元路径的缺点:1)元路径已经被证明对表征丰富的语义和提取高阶结构的能力有限;2)从源节点出发,元路径可以到达的节点数通常都很大,而元图因为更加复杂和限制性的结构,元图可以到达的节点会少很多,这使得元图比元路径更高效。

这里就是学习子图的表示和负样本对应的子图的表示对比,来学习到更好的子图级别的表示。

预训练和微调设置:我们首先预训练一个GNN模型并采用预训练模型的权重来为下游任务初始化模型。然后我们在没有见过的图上微调GNN模型来执行对应的下游任务并评估模型的性能。对于Yelp数据集,随机划分Yelp里3/4的店铺节点和其对应的其他节点到预训练阶段,剩下的到微调阶段。



05

Pre-Training Graph Neural Networks for Cold-Start Users and Items Representation [WSDM 21]

尽管最近GNN上的工作吸收高阶协同信号来缓解冷启动问题,但是冷启动用户和物品的embedding还是没有显示优化,并且在GNN的图卷积里没有考虑冷启动节点的冷启动邻居。这篇文章提出去在推荐之前预训练一个GNN模型。不同于推荐的目标,这个预训练的GNN通过有充分交互的用户、物品里面模拟冷启动的场景并且将重建embedding作为pretext task,因为这样的话就可以直接优化embedding的质量然后能够简单地应用到新的冷启动的用户和物品上。为了进一步减少冷启动的邻居的影响,我们考虑了一个自注意力为基础的元聚集器去增强每一步图卷积的聚集能力,并且考虑了一个自适应的邻居采样来根据预训练的模型的反馈选择邻居。

本文首先提出一个基础的预训练GNN模型来重构元学习设置里面冷启动用户/物品embedding。为了达到这个目的,首先需要冷启动用户/物品的ground truth的embedding来学习模型,这里使用有大量交互数据的用户和物品来模拟。这里的ground truth embedding是使用观测到的交互送进NCF进行学习的。接下来就是一个基础的GNN模型,然后用这个GNN f 学习到的用户表示和ground truth的用户表示来进行相似度计算然后训练。

图片

Meta Aggregator

现有的工作都没有很好地考虑卷积的时候其他节点也是冷启动的节点的情况,这可能会导致卷积后的节点表示不精确的问题。

这里使用和f一样的元学习设置来训练另一个函数g。g基于每一个节点的一阶邻居为它在学习一个额外的邻居,那么这样它就能快速适应到新的冷启动节点并且产生更精确的embedding。在f里的每一次卷积操作都是将g产生的embedding和原来的embedding结合起来。f是用来解决冷启动的目标结点的表示学习,而g是增强目标节点的冷启动的邻居节点的embedding.

The Adaptive Neighbor Sampler

这个采样器根据预训练的GNN模型的反馈来学习一个自适应的采样策略。

模型预训练和下游推荐任务

预训练:首先根据一阶的邻居预训练g,然后把g吸收进每一步的图卷积里去预训练元聚集器,接下来我们根据预训练的元聚集器的反馈来预训练邻居采样器,最后我们把这些一起训练。

下游推荐任务:对于每一个目标用户和他的不同阶的邻居,我们首先使用预训练的邻居采样器来采样合适的高阶邻居,然后使用预训练的元聚集器获得用户的embedding。物品的embedding也可以通过同样的方式生成。然后我们转换这两个embedding并相乘获得相关性得分再用BPR loss进行训练。

图片

如果觉得有用,就请分享到朋友圈吧!

最后欢迎大家关注我的微信公众号:对白的算法屋(duibainotes),跟踪NLP、推荐系统和对比学习等机器学习领域前沿,日常还会分享我的创业心得和人生感悟。想进一步交流的同学也可以通过公众号加我的微信,和我一同探讨技术问题,谢谢!



推荐阅读
  • IOS Run loop详解
    为什么80%的码农都做不了架构师?转自http:blog.csdn.netztp800201articledetails9240913感谢作者分享Objecti ... [详细]
  • DVWA学习笔记系列:深入理解CSRF攻击机制
    DVWA学习笔记系列:深入理解CSRF攻击机制 ... [详细]
  • 通过将常用的外部命令集成到VSCode中,可以提高开发效率。本文介绍如何在VSCode中配置和使用自定义的外部命令,从而简化命令执行过程。 ... [详细]
  • DAO(Data Access Object)模式是一种用于抽象和封装所有对数据库或其他持久化机制访问的方法,它通过提供一个统一的接口来隐藏底层数据访问的复杂性。 ... [详细]
  • 本文介绍了在 Java 编程中遇到的一个常见错误:对象无法转换为 long 类型,并提供了详细的解决方案。 ... [详细]
  • 网站访问全流程解析
    本文详细介绍了从用户在浏览器中输入一个域名(如www.yy.com)到页面完全展示的整个过程,包括DNS解析、TCP连接、请求响应等多个步骤。 ... [详细]
  • 从0到1搭建大数据平台
    从0到1搭建大数据平台 ... [详细]
  • 原文网址:https:www.cnblogs.comysoceanp7476379.html目录1、AOP什么?2、需求3、解决办法1:使用静态代理4 ... [详细]
  • 在尝试对 QQmlPropertyMap 类进行测试驱动开发时,发现其派生类中无法正常调用槽函数或 Q_INVOKABLE 方法。这可能是由于 QQmlPropertyMap 的内部实现机制导致的,需要进一步研究以找到解决方案。 ... [详细]
  • 如何将Python与Excel高效结合:常用操作技巧解析
    本文深入探讨了如何将Python与Excel高效结合,涵盖了一系列实用的操作技巧。文章内容详尽,步骤清晰,注重细节处理,旨在帮助读者掌握Python与Excel之间的无缝对接方法,提升数据处理效率。 ... [详细]
  • 在《Cocos2d-x学习笔记:基础概念解析与内存管理机制深入探讨》中,详细介绍了Cocos2d-x的基础概念,并深入分析了其内存管理机制。特别是针对Boost库引入的智能指针管理方法进行了详细的讲解,例如在处理鱼的运动过程中,可以通过编写自定义函数来动态计算角度变化,利用CallFunc回调机制实现高效的游戏逻辑控制。此外,文章还探讨了如何通过智能指针优化资源管理和避免内存泄漏,为开发者提供了实用的编程技巧和最佳实践。 ... [详细]
  • 在使用 Cacti 进行监控时,发现已运行的转码机未产生流量,导致 Cacti 监控界面显示该转码机处于宕机状态。进一步检查 Cacti 日志,发现数据库中存在 SQL 查询失败的问题,错误代码为 145。此问题可能是由于数据库表损坏或索引失效所致,建议对相关表进行修复操作以恢复监控功能。 ... [详细]
  • 深入探索HTTP协议的学习与实践
    在初次访问某个网站时,由于本地没有缓存,服务器会返回一个200状态码的响应,并在响应头中设置Etag和Last-Modified等缓存控制字段。这些字段用于后续请求时验证资源是否已更新,从而提高页面加载速度和减少带宽消耗。本文将深入探讨HTTP缓存机制及其在实际应用中的优化策略,帮助读者更好地理解和运用HTTP协议。 ... [详细]
  • 本文将继续探讨 JavaScript 函数式编程的高级技巧及其实际应用。通过一个具体的寻路算法示例,我们将深入分析如何利用函数式编程的思想解决复杂问题。示例中,节点之间的连线代表路径,连线上的数字表示两点间的距离。我们将详细讲解如何通过递归和高阶函数等技术实现高效的寻路算法。 ... [详细]
  • JUC(三):深入解析AQS
    本文详细介绍了Java并发工具包中的核心类AQS(AbstractQueuedSynchronizer),包括其基本概念、数据结构、源码分析及核心方法的实现。 ... [详细]
author-avatar
C3calm_daidai_649
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有